Java三维数组深度复制,JS中多维数组的深拷贝的多种实现方式

您所在的位置:网站首页 Java 复制多维数组 Java三维数组深度复制,JS中多维数组的深拷贝的多种实现方式

Java三维数组深度复制,JS中多维数组的深拷贝的多种实现方式

2023-10-22 09:49| 来源: 网络整理| 查看: 265

这种做法是错的,因为javascript分原始类型与引用类型(与java、c#类似)。Array是引用类型。array2得到的是引用,所以对array1的修改会影响到array2。

二、 一维数组的实现方式:

使用slice() 或者 concat()来实现一维数组的深拷贝,但这种方法只适用于一维数组,对多维数组无效。

可使用slice()进行复制,因为slice()返回也是数组。

var array1 = new Array("1","2","3");

var array2;

array2 = array1.slice(0);

array1.length = 0;

alert(array2); //返回1、2、3

注意concat()返回的并不是调用函数的Array,而是一个新的Array,所以可以利用这一点进行复制。

var array1 = new Array("1","2","3");

var array2;

array2 = array1.concat();

array1.length = 0;

alert(array2); //返回1、2、3

三、 多维数组的JS函数实现方式:

9f27916f38dff21cd6022ea54cda45a6.gif

function deepcopy(obj) {

var out = [],i = 0,len = obj.length;

for (; i < len; i++) {

if (obj[i] instanceof Array){

out[i] = deepcopy(obj[i]);

}

else out[i] = obj[i];

}

return out;

}

//下面是测试代码

var weekArray = new Array(7);//数组第一维

var timeTableArray = new Array(); //数组第二维

var lineArray = new Array(4); //数组第三维

lineArray[0] = "1_a";

lineArray[1] = "1_b";

lineArray[2] = "1_c";

timeTableArray.push(lineArray);

weekArray[0] = deepcopy(timeTableArray);

//清空,并添加其他星期的数据

lineArray.splice(0,lineArray.length);

timeTableArray.splice(0,timeTableArray.length);

lineArray[0] = "7_a";

lineArray[1] = "7_b";

lineArray[3] = "7_d";

timeTableArray.push(lineArray);

weekArray[7] = deepcopy(timeTableArray);

alert("weekArray=" + weekArray[0]);//返回 "1_a,1_b,1_c,"

alert("weekArray=" + weekArray[7]);//返回 "7_a,7_b,,7_d"

821b3e5b50a5fb4916db0e461dcff4b1.gif

四、 多维数组的jquery实现方式:

把上述的deepcopy函数用下面的函数替代即可

weekArray[0] = $.extend(true, {}, timeTableArray);



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3